#include "recbox.h"
#include "ui_recbox.h"
#include "recboxitem.h"
#include <QJsonObject>
RecBox::RecBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBox),
    row(1),//默认1行
    col(4)//默认4列
{
    ui->setupUi(this);

}

RecBox::~RecBox()
{
    delete ui;
}
//初始化RecBoxItem
void RecBox::initRecBoxUi(QJsonArray data, int row)
{
    if(row==2)
    {
        this->row=row;
        col=8;
    }
    else
    {
        //row=1时，将下面的recListDown隐藏起来，只进行展示recListUp
        ui->recListDown->hide();
    }
    //将JSON数组获取到此类中
    imageList=data;

    //设置当前显示图片组的id
    currentIndex=0;
    //设置总组数
    count=imageList.size()/col;

    //在RecBox控件中添加RecBoxItem元素
    createRecBoxItem();
}
//在RecBox控件中添加RecBoxItem元素
void RecBox::createRecBoxItem()
{
    //删除RecBox内部的元素
    //找到recListUp中的所有的RecBoxItem元素的地址，返回一个列表
    QList<RecBoxItem*> recUpList=ui->recListUp->findChildren<RecBoxItem*>();
    for(RecBoxItem* e:recUpList)
    {
        //删除这个e元素(RecBoxItem对象的指针)
        ui->recListUpHLayout->removeWidget(e);
        //销毁这个元素
        delete e;
    }
    //找到recListDown中的所有的RecBoxItem元素的地址，返回一个列表
    QList<RecBoxItem*> recDownList=ui->recListDown->findChildren<RecBoxItem*>();
    for(RecBoxItem* e:recDownList)
    {
        //删除这个e元素(RecBoxItem对象的指针)
        ui->recListDownHLayout->removeWidget(e);
        //销毁这个元素
        delete e;
    }
    //记录循环次数
    int index=0;
    //创建RecBoxItem对象，往RecBox中进行添加
    for(int i=currentIndex*col;i<col+currentIndex*col;i++)
    {
        //创建RecBoxItem对象
        RecBoxItem *item=new RecBoxItem();
        //设置图片和文本
        //拿到JSON列表中的对象,里面记录图片路径和文本信息
        QJsonObject obj=imageList[i].toObject();
        item->setRecText(obj.value("text").toString());
        item->setRecImage(obj.value("path").toString());

        //将这个RecBoxItem对象添加到RecBox对象中
        /* 这里存在一个问题，对于今日为你推荐的RecBox来说，只需要展示上面的recListUp即可，隐藏recListDown
         * 对于你的音乐补给站的RecBox来说，需要展示recListUp和recListDown
         * 这里，对于一个recBox对象来说，通过col来将其进行区分
         * 今日为你推荐的RecBox row:1 col:4
         * 你的音乐补给站的RecBox row:2 col:8
         * 这里如果col=4,就只会在recListUp中添加RecBoxItem对象
         * 如果col=8,前4个RecBoxItem对象添加到recListUp中，后4个RecBoxItem对象添加到recListDown中
         */
        if(index>=col/2 && row==2)
        {
            ui->recListDownHLayout->addWidget(item);
        }
        else
        {
            ui->recListUpHLayout->addWidget(item);
        }
        index++;
    }
}
//后翻按钮点击的槽函数
void RecBox::on_btDown_clicked()
{
    //点击之后，需要显示下一组图片，如果已经是最后一组图片，就显示第0组
    //count组数如果是3，那么下标就是0，1，2
    currentIndex++;
    if(currentIndex>=count)
    {
        currentIndex=0;
    }
    //重新加载RecBoxItem资源即可
    createRecBoxItem();
}
//前翻按钮点击的槽函数
void RecBox::on_btUp_clicked()
{
    //点击之后，需要显示上一组图片，如果已经是第0组图片，就显示最后一组
    currentIndex--;
    if(currentIndex<0)
    {
        currentIndex=count-1;
    }
    //重新加载RecBoxItem资源即可
    createRecBoxItem();
}
